Dockerfile最小化构建镜像:减少层数、清理无用数据、多段构建

您所在的位置:网站首页 docker 拷贝镜像 Dockerfile最小化构建镜像:减少层数、清理无用数据、多段构建

Dockerfile最小化构建镜像:减少层数、清理无用数据、多段构建

2024-02-28 07:47| 来源: 网络整理| 查看: 265

       docker的官方虽然有数十万计的免费镜像,但是出于某些安全考虑,一般不会使用免费镜像,因此这就需要我们自己制作镜像,制作的镜像如果很大,那么在镜像上传、下载的时候是很不方便的,因此我们需要精简我们制作的镜像,在满足需要的情况下,镜像越小越好。

       镜像小有很多好处,例如快速部署、快速回滚。减少服务中断时间,同时镜像仓库占用磁盘空间也少了。

最小化构建镜像

最小化构建镜像,我们一般从下边三个方面进行操作:

1.减少层数

docker的构建中,Dockerfile中一个RUN会在镜像上构建一层,因此需要将多个RUN合并执行,减少镜像层数。 未减少镜像层数之前的Dockerfile:

FROM centos RUN yum install -y vim RUN yum install -y net-tools

执行命令,构建镜像:docker build -t centos:test . 构建成功之后,查看镜像大小: 在这里插入图片描述 减少镜像层数的Dockerfile:

FROM centos RUN yum install -y vim && \ yum install -y net-tools

执行命令,构建镜像:docker build -t centos:small . 构建成功,查看镜像大小: 在这里插入图片描述 可以看到,通过减少层数有效的减少了镜像的大小。

2.清理无用数据

一次RUN形成新的一层,如果没有在同一层删除,无论文件是否最后删除,都会带到下一层,所以要在每一层清理对应的残留数据,减小镜像大小。 未清理当前镜像层数的缓存的Dockerfile:

FROM centos RUN yum install epel-release -y && \ yum install -y gcc gcc-c++ make gd-devel libxml2-devel \ libcurl-devel libjpeg-devel libpng-devel openssl-devel \ libmcrypt-devel libxslt-devel libtidy-devel autoconf \ iproute net-tools telnet wget curl

执行命令,构建镜像:docker build -t centos:notclear . 构建成功,查看镜像大小: 在这里插入图片描述 清理当前镜像层数的缓存的Dockerfile:

FROM centos RUN yum install epel-release -y && \ yum install -y gcc gcc-c++ make gd-devel libxml2-devel \ libcurl-devel libjpeg-devel libpng-devel openssl-devel \ libmcrypt-devel libxslt-devel libtidy-devel autoconf \ iproute net-tools telnet wget curl && \ yum clean all && \ rm -rf /var/cache/yum/*

执行命令,构建镜像:docker build -t centos:clear . 构建成功,查看镜像大小: 在这里插入图片描述 可以看到镜像的大小明显减少了

3.多段构建

多段构建多用于需要编译安装的软件,或者是一些需要解压缩的软件,比如下边,我们采用多段构建编译一个jdk的镜像:

未采用多段构建的Dockerfile:

FROM centos AS jdk COPY jdk-8u231-linux-x64.tar.gz /usr/local/src RUN cd /usr/local/src && \ tar -xzvf jdk-8u231-linux-x64.tar.gz -C /usr/local

执行命令,构建镜像:docker build -t centos:notmul . 构建成功,查看镜像大小: 在这里插入图片描述

采用多段构建的Dockerfile:

FROM centos AS jdk COPY jdk-8u231-linux-x64.tar.gz /usr/local/src RUN cd /usr/local/src && \ tar -xzvf jdk-8u231-linux-x64.tar.gz -C /usr/local FROM centos COPY --from=jdk /usr/local/jdk1.8.0_231 /usr/local

执行命令,构建镜像:docker build -t centos:mul . 构建成功,查看镜像大小: 在这里插入图片描述 多段构建其实就是将从上一个构建好的镜像只取自己需要的数据,然后复制到第二个镜像,这样会大大减少镜像的大小。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3